package com.teamwork_backend.controller;


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.teamwork_backend.entity.CompanyInfo;
import com.teamwork_backend.entity.UserInfo;
import com.teamwork_backend.entity.Users;
import com.teamwork_backend.entity.ov.CompanysListView;
import com.teamwork_backend.entity.ov.UsersListView;
import com.teamwork_backend.mapper.CompanyInfoDao;
import com.teamwork_backend.mapper.CompanysDao;
import com.teamwork_backend.mapper.UserInfoDao;
import com.teamwork_backend.mapper.UsersDao;
import com.teamwork_backend.service.CompanyInfoService;
import com.teamwork_backend.service.UserInfoService;
import com.teamwork_backend.service.UsersService;
import com.teamwork_backend.utils.DataResult;
import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author windy
 * @since 2021-04-25
 */
@RestController
@RequestMapping("/company-info")
@Api(value = "UsersController", tags = {"企业/平台信息接口"})
public class CompanyInfoController{
    // 注入数据模型
    @Autowired
    private UsersService usersService;

    @Resource
    private UsersDao usersDao;
    /**
     * 模糊查询个人用户登录信息
     */
    @GetMapping("getuser") // Get方法
    @ApiOperation(value = "模糊查询个人用户登录信息", notes = "模糊查询个人用户登录信息", httpMethod = "GET")
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    @ApiImplicitParams({
            @ApiImplicitParam(name = "content", value = "搜索内容", required = false, dataType = "string")})
    public DataResult getuser(String content) {
        // 定义查询字段
        // wrapper用法见https://blog.csdn.net/m0_37034294/article/details/82917234
//        QueryWrapper<Users> wrapper = new QueryWrapper<>();
//        wrapper.select().eq("type", 0);
        // 会自动生成 SELECT * FROM user_info WHERE userid = userid
        // 定义数据接收对象
//        UserInfo userInfo = userInfoService.getOne(wrapper);
        // 如果是列表

        // List<Users> list = usersService.list(wrapper);
        List<UsersListView> ls= usersDao.getUserInfo(0,content);
        return DataResult.finished().data("data", ls).message("所有用户信息查找成功！");
    }

    /**
     * 模糊查询专家用户登录信息
     */
    @GetMapping("getparent") // Get方法
    @ApiOperation(value = "模糊查询专家用户登录信息", notes = "模糊查询专家用户登录信息", httpMethod = "GET")
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    @ApiImplicitParams({
            @ApiImplicitParam(name = "content", value = "搜索内容", required = false, dataType = "string")})
    public DataResult getparent(String content) {
        // 定义查询字段
        // wrapper用法见https://blog.csdn.net/m0_37034294/article/details/82917234
        QueryWrapper<Users> wrapper = new QueryWrapper<>();
        wrapper.select().eq("type", 1);
        // 会自动生成 SELECT * FROM user_info WHERE userid = userid
        // 定义数据接收对象
//        UserInfo userInfo = userInfoService.getOne(wrapper);
        // 如果是列表
        List<UsersListView> ls = usersDao.getUserInfo(1,content);
        return DataResult.finished().data("data", ls).message("所有专家信息查找成功！");
    }


    @Resource
    private CompanyInfoDao companyInfoDao;
    @Autowired
    private CompanyInfoService companyInfoService;

    /** 模糊查询获取企业信息列表 */
    @GetMapping("getcompanysinfo") // Get方法
    @ApiOperation(value = "模糊查询获取企业信息列表", notes = "模糊查询获取企业信息列表", httpMethod = "GET")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "content", value = "搜索内容", required = false, dataType = "string")})
    public DataResult getcompanysinfo(String content) {
        // 定义数据接收对象，这里调用了UserInfoDao.java层中的自定义SQL语句方法
        List<CompanysListView> companysListView = companyInfoDao.searchCompanyInfo(content);
        // 判断是否存在该用户信息
        if(companysListView != null) {
            // 成功返回数据
            return DataResult.finished().data("data", companysListView).message("企业信息查找成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("企业信息不存在！");
        }
    }



    /** 获取企业信息 */
    @GetMapping("getcompanyInfo") // Get方法
    @ApiOperation(value = "获取企业信息", notes = "获取企业信息", httpMethod = "GET")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "companyid", value = "企业唯一标示", required = true, dataType = "string")})

    public DataResult getcompanyInfo(String companyid) {
        QueryWrapper<CompanyInfo> wrapper = new QueryWrapper<>();
        wrapper.select().eq("companyid", companyid);
        CompanyInfo companyInfo = companyInfoService.getOne(wrapper);
        if(companyInfo != null) {
            // 成功返回数据
            return DataResult.finished().data("data", companyInfo).message("企业信息找成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("企业信息不存在！");
        }
    }



    /** 更新企业信息
     */
    @PostMapping("updatetcompanyInfo") // Post方法
    @ApiOperation(value = "更新企业信息", notes = "更新企业信息", httpMethod = "POST")
    public DataResult updatetcompanyInfo(
            @ApiParam(name = "companyInfoid", value = "企业信息", required = true)
            @RequestBody CompanyInfo companyInfo)
    {
        // 设置添加成功的返回标志
        boolean flag =companyInfoService.updateById(companyInfo);
        if (flag) {
            // 成功返回数据
            return DataResult.finished().message("企业信息更新成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("企业信息更新失败！");
        }
    }

    /** 增加企业信息
     */
    @PostMapping("addcompanyInfo") // Post方法
    @ApiOperation(value = "增加企业信息", notes = "增加企业信息", httpMethod = "POST")
    // GET请求会直接在函数括号里面跟参数，并且写在外面写@ApiImplicitParams注解
    // POST请求需要写@RequestBody请求体，通过参数对象来传参数，一定要注意否则前端Vue+axios接收不了参数
    public DataResult addtInfo(
            @ApiParam(name = "companyInfo", value = "企业信息", required = true)
            // 这个就是一个请求体
            @RequestBody CompanyInfo companyInfo)
    {
        // 设置添加成功的返回标志
        boolean flag = companyInfoService.save(companyInfo);
        if (flag) {
            // 成功返回数据
            return DataResult.finished().message("企业信息添加成功！");
        } else {
            // 失败返回数据
            return DataResult.failed().message("企业信息添加失败！");
        }
    }

}

